<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">package cs5620.object;

import javax.vecmath.AxisAngle4f;
import javax.vecmath.Color3f;
import javax.vecmath.Matrix4f;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;

import cs5620.material.IsotropicWard;
import cs5620.material.CookTorrance;
import cs5620.material.Lambertian;
import cs5620.material.Phong;

public class Wagon implements ParameterizedObjectMaker {

	/**
	 * Creates a wagon.  Default setting:  2 sltats, front wheels at 35 degree rotation,
	 * and front arm at 65 degree rotation
	 * @param numSlats Integer: number of slats
	 * @param wheelAngle Float: angle of rotation of front wheels 
	 * @param armAngle Float: Angle of rotation for arm
	 */
	public HierarchicalObject make(Object... inputs) {
		
		int numSlats = 2;
		float wheelAngle = 35f;
		float armAngle = 65f;
		
		if (inputs.length == 3) {
			numSlats = (Integer) inputs[0];
			wheelAngle = (Float) inputs[1];
			armAngle = (Float) inputs[2];
		}
		
		
		
		Scene out = new Scene();
		
		Group Wagon = new Group("Wagon");
		
		Group BodyAndRearAssembly = new Group("Body and Rear Wheel Assembly");
		
		Group FrontAssembly = new Group("Front assembly");
		
		Group ArmAssembly = new Group("Arm Assembly");
		
		Phong wagonGray = new Phong(new Color3f(0.55f, 0.55f, 0.55f), new Color3f(0.777f, 0.777f, 0.777f), 50f);
		IsotropicWard wagonSteel = new IsotropicWard(new Color3f(0.015f, 0.015f, 0.015f), new Color3f(0.0177f, 0.0177f, 0.0177f), 0.0577f);
		Phong wagonColor = new Phong(new Color3f(1.0f, 0.f, 0.f), new Color3f(1.0f, 0.0f, 0.0f), 5f);
		CookTorrance wheelColor = new CookTorrance(new Color3f(0.006f, 0.005f, 0.004f), new Color3f(0.0939f, 0.0765f, 0.0515f), 0.136f, 0.325f);
		
		// Make the body of the Wagon
		MeshObject bottomOfBody = PrimitiveFactory.makeBox("BottomofBody");
		bottomOfBody.setTranslate(0f,-0.25f,0.5f);
		bottomOfBody.setScale(0.25f, 0.01f, .5f);
		bottomOfBody.setMaterial(wagonColor);
		
		MeshObject frontSide = PrimitiveFactory.makeBox("FrontSide");
		frontSide.setTranslate(0f,-0.125f,0f);
		frontSide.setScale(0.25f, 0.125f, 0.01f);
		frontSide.setMaterial(wagonColor);
		
		MeshObject backSide = PrimitiveFactory.makeBox("BackSide");
		backSide.setTranslate(0f,-0.125f,1f);
		backSide.setScale(0.25f, 0.125f, 0.01f);
		backSide.setMaterial(wagonColor);
		
		MeshObject leftSide = PrimitiveFactory.makeBox("leftSide");
		leftSide.setTranslate(0.25f, -0.125f, 0.5f);
		leftSide.setScale(0.01f, 0.125f, 0.5f);
		leftSide.setMaterial(wagonColor);
		
		MeshObject rightSide = PrimitiveFactory.makeBox("rightSide");
		rightSide.setTranslate(-0.25f, -0.125f, 0.5f);
		rightSide.setScale(0.01f, 0.125f, 0.5f);
		rightSide.setMaterial(wagonColor);
		
		// Make the slats of the wagon
		MeshObject rightMiddleSupport = PrimitiveFactory.makeBox("rightMiddleSupport");
		rightMiddleSupport.setTranslate(0f, -0.05f, 0f);
		rightMiddleSupport.setScale(0.01f, 0.15f, 0.025f);
		rightMiddleSupport.setMaterial(wagonGray);
		
		MeshObject rightBackSupport = PrimitiveFactory.makeBox("rightFrontSupport");
		rightBackSupport.setTranslate(0f, -0.05f, 0.4f);
		rightBackSupport.setScale(0.01f, 0.15f, 0.025f);
		rightBackSupport.setMaterial(wagonGray);
		
		MeshObject rightFrontSupport = PrimitiveFactory.makeBox("rightFrontSupport");
		rightFrontSupport.setTranslate(0f, -0.05f, -0.4f);
		rightFrontSupport.setScale(0.01f, 0.15f, 0.025f);
		rightFrontSupport.setMaterial(wagonGray);
		
		MeshObject rightSlatPanel = PrimitiveFactory.makeBox("RightSlatPanel");
		rightSlatPanel.setTranslate(-0.02f, 0.075f, 0f);
		rightSlatPanel.setScale(0.01f, 0.025f, 0.5f);
		rightSlatPanel.setMaterial(new CookTorrance(new Color3f(0.0568f, 0.0369f, 0.0168f), new Color3f(0.305f, 0.251f, 0.166f), 0.0924f, 0.0233f));
		
		MeshObject leftMiddleSupport = PrimitiveFactory.makeBox("LeftMiddleSupport");
		leftMiddleSupport.setTranslate(0f, -0.05f, 0f);
		leftMiddleSupport.setScale(0.01f, 0.15f, 0.025f);
		leftMiddleSupport.setMaterial(wagonGray);
		
		MeshObject leftBackSupport = PrimitiveFactory.makeBox("LeftFrontSupport");
		leftBackSupport.setTranslate(0f, -0.05f, 0.4f);
		leftBackSupport.setScale(0.01f, 0.15f, 0.025f);
		leftBackSupport.setMaterial(wagonGray);
		
		MeshObject leftFrontSupport = PrimitiveFactory.makeBox("LeftFrontSupport");
		leftFrontSupport.setTranslate(0f, -0.05f, -0.4f);
		leftFrontSupport.setScale(0.01f, 0.15f, 0.025f);
		leftFrontSupport.setMaterial(wagonGray);
		
		MeshObject leftSlatPanel = PrimitiveFactory.makeBox("LeftSlatPanel");
		leftSlatPanel.setTranslate(0.02f, 0.075f, 0f);
		leftSlatPanel.setScale(0.01f, 0.025f, 0.5f);
		leftSlatPanel.setMaterial(new CookTorrance(new Color3f(0.0568f, 0.0369f, 0.0168f), new Color3f(0.305f, 0.251f, 0.166f), 0.0924f, 0.0233f));
		
		
		
		// Corners
		MeshObject frontLeftCorner = PrimitiveFactory.makeCylinder(1, 30, "FrontLeftCorner");
		frontLeftCorner.setTranslate(0.25f, -0.125f, 0f);
		frontLeftCorner.setScale(0.01f, 0.125f, 0.01f);
		frontLeftCorner.setMaterial(wagonColor);

		MeshObject frontRightCorner = PrimitiveFactory.makeCylinder(1, 30, "FrontRightCorner");
		frontRightCorner.setTranslate(-0.25f, -0.125f, 0f);
		frontRightCorner.setScale(0.01f, 0.125f, 0.01f);
		frontRightCorner.setMaterial(wagonColor);
		
		MeshObject rearLeftCorner = PrimitiveFactory.makeCylinder(1, 30, "RearLeftCorner");
		rearLeftCorner.setTranslate(0.25f, -0.125f, 1f);
		rearLeftCorner.setScale(0.01f, 0.125f, 0.01f);
		rearLeftCorner.setMaterial(wagonColor);
		
		MeshObject rearRightCorner = PrimitiveFactory.makeCylinder(1, 30, "RearRightCorner");
		rearRightCorner.setTranslate(-0.25f, -0.125f, 1f);
		rearRightCorner.setScale(0.01f, 0.125f, 0.01f);
		rearRightCorner.setMaterial(wagonColor);
		
		// Bottom Lips
		MeshObject bottomFrontLip = PrimitiveFactory.makeCylinder(1, 30, "BottomFrontLip");
		bottomFrontLip.setTranslate(0f, -0.25f, 0f);
		bottomFrontLip.setRotationAxisAngle(90f, 0f, 0f, 1f);
		bottomFrontLip.setScale(0.01f, 0.25f, 0.01f);
		bottomFrontLip.setMaterial(wagonColor);

		MeshObject bottomBackLip = PrimitiveFactory.makeCylinder(1, 30, "BottomBackLip");
		bottomBackLip.setTranslate(0f, -0.25f, 1f);
		bottomBackLip.setRotationAxisAngle(90f, 0f, 0f, 1f);
		bottomBackLip.setScale(0.01f, 0.25f, 0.01f);
		bottomBackLip.setMaterial(wagonColor);
		
		MeshObject bottomLeftLip = PrimitiveFactory.makeCylinder(1, 30, "BottomLeftLip");
		bottomLeftLip.setTranslate(0.25f, -0.25f, 0.5f);
		bottomLeftLip.setRotationAxisAngle(90f, 1f, 0f, 0f);
		bottomLeftLip.setScale(0.01f, 0.5f, 0.01f);
		bottomLeftLip.setMaterial(wagonColor);
		
		MeshObject bottomRightLip = PrimitiveFactory.makeCylinder(1, 30, "BottomRightLip");
		bottomRightLip.setTranslate(-0.25f, -0.25f, 0.5f);
		bottomRightLip.setRotationAxisAngle(90f, 1f, 0f, 0f);
		bottomRightLip.setScale(0.01f, 0.5f, 0.01f);
		bottomRightLip.setMaterial(wagonColor);
		
		MeshObject bottomFrontLeft = PrimitiveFactory.makeSphere(30, 30, "BottomFrontLeft");
		bottomFrontLeft.setTranslate(0.25f, -0.25f, 0f);
		bottomFrontLeft.setScale(0.01f, 0.01f, 0.01f);
		bottomFrontLeft.setMaterial(wagonColor);
		
		MeshObject bottomFrontRight = PrimitiveFactory.makeSphere(30, 30, "BottomFrontRight");
		bottomFrontRight.setTranslate(-0.25f, -0.25f, 0f);
		bottomFrontRight.setScale(0.01f, 0.01f, 0.01f);
		bottomFrontRight.setMaterial(wagonColor);
		
		MeshObject bottomBackLeft = PrimitiveFactory.makeSphere(30, 30, "BottomBackLeft");
		bottomBackLeft.setTranslate(0.25f, -0.25f, 1f);
		bottomBackLeft.setScale(0.01f, 0.01f, 0.01f);
		bottomBackLeft.setMaterial(wagonColor);
		
		MeshObject bottomBackRight = PrimitiveFactory.makeSphere(30, 30, "BottomBackRight");
		bottomBackRight.setTranslate(-0.25f, -0.25f, 1f);
		bottomBackRight.setScale(0.01f, 0.01f, 0.01f);
		bottomBackRight.setMaterial(wagonColor);
		
		// Top Lips
		MeshObject topFrontLip = PrimitiveFactory.makeCylinder(1, 30, "TopFrontLip");
		topFrontLip.setTranslate(0f, 0f, -0.005f);
		topFrontLip.setRotationAxisAngle(90f, 0f, 0f, 1f);
		topFrontLip.setScale(0.015f, 0.255f, 0.015f);
		topFrontLip.setMaterial(wagonColor);

		MeshObject topBackLip = PrimitiveFactory.makeCylinder(1, 30, "TopBackLip");
		topBackLip.setTranslate(0f, 0f, 1.005f);
		topBackLip.setRotationAxisAngle(90f, 0f, 0f, 1f);
		topBackLip.setScale(0.015f, 0.255f, 0.015f);
		topBackLip.setMaterial(wagonColor);
		
		MeshObject topLeftLip = PrimitiveFactory.makeCylinder(1, 30, "TopLeftLip");
		topLeftLip.setTranslate(0.255f, 0f, 0.5f);
		topLeftLip.setRotationAxisAngle(90f, 1f, 0f, 0f);
		topLeftLip.setScale(0.015f, 0.505f, 0.015f);
		topLeftLip.setMaterial(wagonColor);
		
		MeshObject topRightLip = PrimitiveFactory.makeCylinder(1, 30, "TopRightLip");
		topRightLip.setTranslate(-0.255f, 0f, 0.5f);
		topRightLip.setRotationAxisAngle(90f, 1f, 0f, 0f);
		topRightLip.setScale(0.015f, 0.505f, 0.015f);
		topRightLip.setMaterial(wagonColor);
		
		MeshObject topFrontLeft = PrimitiveFactory.makeSphere(30, 30, "TopFrontLeft");
		topFrontLeft.setTranslate(0.255f, 0f, -0.005f);
		topFrontLeft.setScale(0.015f, 0.015f, 0.015f);
		topFrontLeft.setMaterial(wagonColor);
		
		MeshObject topFrontRight = PrimitiveFactory.makeSphere(30, 30, "TopFrontRight");
		topFrontRight.setTranslate(-0.255f, 0f, -0.005f);
		topFrontRight.setScale(0.015f, 0.015f, 0.015f);
		topFrontRight.setMaterial(wagonColor);
		
		MeshObject topBackLeft = PrimitiveFactory.makeSphere(30, 30, "TopBackLeft");
		topBackLeft.setTranslate(0.255f, 0f, 1.005f);
		topBackLeft.setScale(0.015f, 0.015f, 0.015f);
		topBackLeft.setMaterial(wagonColor);
		
		MeshObject topBackRight = PrimitiveFactory.makeSphere(30, 30, "TopBackRight");
		topBackRight.setTranslate(-0.255f, 0f, 1.005f);
		topBackRight.setScale(0.015f, 0.015f, 0.015f);
		topBackRight.setMaterial(wagonColor);
		
		// Make back wheel assembly
		MeshObject backAxle = PrimitiveFactory.makeCylinder(1, 30, "BackAxle");
		backAxle.setTranslate(0f,-0.4f, 0.9f);
		backAxle.setRotationAxisAngle(90f, 0f, 0f, 1f);
		backAxle.setScale(0.025f, 0.25f, 0.025f);
		backAxle.setMaterial(wagonSteel);
		
		MeshObject backAxleLeftStand = PrimitiveFactory.makeCylinder(1, 30, "BackAxleLeftStand");
		backAxleLeftStand.setTranslate(0.15f, -0.325f, 0.9f);
		backAxleLeftStand.setScale(0.025f, 0.075f, 0.025f);
		backAxleLeftStand.setMaterial(wagonSteel);
		
		MeshObject backAxleRightStand = PrimitiveFactory.makeCylinder(1, 30, "BackAxleRightStand");
		backAxleRightStand.setTranslate(-0.15f, -0.325f, 0.9f);
		backAxleRightStand.setScale(0.025f, 0.075f, 0.025f);
		backAxleRightStand.setMaterial(wagonSteel);
		
		MeshObject backLeftWheel = PrimitiveFactory.makeCylinder(1, 30, "BackLeftWheel");
		backLeftWheel.setTranslate(0.25f,-0.4f, 0.9f);
		backLeftWheel.setRotationAxisAngle(90f, 0f, 0f, 1f);
		backLeftWheel.setScale(0.125f, 0.035f, 0.125f);
		backLeftWheel.setMaterial(wheelColor);
		
		MeshObject backRightWheel = PrimitiveFactory.makeCylinder(1, 30, "BackRightWheel");
		backRightWheel.setTranslate(-0.25f,-0.4f, 0.9f);
		backRightWheel.setRotationAxisAngle(90f, 0f, 0f, 1f);
		backRightWheel.setScale(0.125f, 0.035f, 0.125f);
		backRightWheel.setMaterial(wheelColor);
		
		MeshObject backLeftHub = PrimitiveFactory.makeCylinder(1, 30, "BackLeftHub");
		backLeftHub.setTranslate(0.25f,-0.4f, 0.9f);
		backLeftHub.setRotationAxisAngle(90f, 0f, 0f, 1f);
		backLeftHub.setScale(0.1f, 0.04f, 0.1f);
		backLeftHub.setMaterial(wagonGray);
		
		MeshObject backRightHub = PrimitiveFactory.makeCylinder(1, 30, "BackRightHub");
		backRightHub.setTranslate(-0.25f,-0.4f, 0.9f);
		backRightHub.setRotationAxisAngle(90f, 0f, 0f, 1f);
		backRightHub.setScale(0.1f, 0.04f, 0.1f);
		backRightHub.setMaterial(wagonGray);
		
		// Make Front Assembly
		MeshObject frontAxle = PrimitiveFactory.makeCylinder(1, 30, "FrontAxle");
		frontAxle.setTranslate(0f,-0.4f, 0f);
		frontAxle.setRotationAxisAngle(90f, 0f, 0f, 1f);
		frontAxle.setScale(0.025f, 0.25f, 0.025f);
		frontAxle.setMaterial(new Lambertian(new Color3f(0f, 0f, 0f)));
		
		MeshObject frontAxleStand = PrimitiveFactory.makeCylinder(1, 30, "FrontAxleStand");
		frontAxleStand.setTranslate(0f, -0.325f, 0f);
		frontAxleStand.setScale(0.04f, 0.075f, 0.04f);
		frontAxleStand.setMaterial(wagonSteel);

		MeshObject frontLeftWheel = PrimitiveFactory.makeCylinder(1, 30, "FrontLeftWheel");
		frontLeftWheel.setTranslate(0.25f,-0.4f, 0f);
		frontLeftWheel.setRotationAxisAngle(90f, 0f, 0f, 1f);
		frontLeftWheel.setScale(0.125f, 0.035f, 0.125f);
		frontLeftWheel.setMaterial(wheelColor);
		
		MeshObject frontRightWheel = PrimitiveFactory.makeCylinder(1, 30, "FrontRightWheel");
		frontRightWheel.setTranslate(-0.25f,-0.4f, 0f);
		frontRightWheel.setRotationAxisAngle(90f, 0f, 0f, 1f);
		frontRightWheel.setScale(0.125f, 0.035f, 0.125f);
		frontRightWheel.setMaterial(wheelColor);
		
		MeshObject frontLeftHub = PrimitiveFactory.makeCylinder(1, 30, "FrontLeftHub");
		frontLeftHub.setTranslate(0.25f,-0.4f, 0f);
		frontLeftHub.setRotationAxisAngle(90f, 0f, 0f, 1f);
		frontLeftHub.setScale(0.1f, 0.04f, 0.1f);
		frontLeftHub.setMaterial(wagonGray);
		
		MeshObject frontRightHub = PrimitiveFactory.makeCylinder(1, 30, "FrontRightHub");
		frontRightHub.setTranslate(-0.25f,-0.4f, 0f);
		frontRightHub.setRotationAxisAngle(90f, 0f, 0f, 1f);
		frontRightHub.setScale(0.1f, 0.04f, 0.1f);
		frontRightHub.setMaterial(wagonGray);
		
		MeshObject frontAxleConnector = PrimitiveFactory.makeCylinder(1, 30, "FrontAxleConnector");
		frontAxleConnector.setTranslate(0f ,-0.325f, -0.1f);
		frontAxleConnector.setRotationAxisAngle(90f, 1f, 0f, 0f);
		frontAxleConnector.setScale(0.035f, 0.1f, 0.035f);
		frontAxleConnector.setMaterial(new Lambertian(new Color3f(0f, 0f, 0f)));
		
		MeshObject ballJoint = PrimitiveFactory.makeSphere(15, 30, "BallJoint");
		ballJoint.setTranslate(0f, -0.325f, -0.2f);
		ballJoint.setScale(0.035f, 0.035f, 0.035f);
		ballJoint.setMaterial(wagonSteel);
		
		// Arm assembly
		Phong phong = new Phong(new Color3f(0.00289f, 0.00263f, 0.00227f), new Color3f(0.00253f, 0.00166f, 0.000999f), 3e4f);
//		0.00289 0.00263 0.00227 0.00253 0.00166 0.000999 3e+004
		MeshObject arm = PrimitiveFactory.makeCylinder(1, 30, "Arm");
		arm.setTranslate(0f, 0f, -0.375f);
		arm.setRotationAxisAngle(90f, 1f, 0f, 0f);
		arm.setScale(0.025f, 0.375f, 0.025f);
		arm.setMaterial(wagonSteel);
		
		MeshObject handleBottom = PrimitiveFactory.makeBox("HandleBottom");
		handleBottom.setTranslate(0f, 0f, -0.75f);
		handleBottom.setScale(0.1f, 0.025f, 0.01f);
		handleBottom.setMaterial(wagonSteel);

		MeshObject handleTop = PrimitiveFactory.makeBox("HandleTop");
		handleTop.setTranslate(0f, 0f, -0.83f);
		handleTop.setScale(0.1f, 0.025f, 0.01f);
		handleTop.setMaterial(wagonSteel);
		
		MeshObject handleLeft = PrimitiveFactory.makeCylinder(1, 30, "HandleLeft");
		handleLeft.setTranslate(0.085f, 0f, -0.79f);
		handleLeft.setRotationAxisAngle(90f, 1f, 0f, 0f);
		handleLeft.setScale(0.015f, 0.04f, 0.015f);
		handleLeft.setMaterial(wagonSteel);
		
		MeshObject handleRight = PrimitiveFactory.makeCylinder(1, 30, "HandleRight");
		handleRight.setTranslate(-0.085f, 0f, -0.79f);
		handleRight.setRotationAxisAngle(90f, 1f, 0f, 0f);
		handleRight.setScale(0.015f, 0.04f, 0.015f);
		handleRight.setMaterial(wagonSteel);
		
		Group rightSlat = new Group();
		
		Group leftSlat = new Group();
		
		for(int i = 0; i &lt; numSlats; i++){
			
			rightSlat = new Group("Right Slat " + (i+1));
			
			leftSlat = new Group("Left Slat " + (i+1));
		
			rightSlat.addObject(rightFrontSupport);
			rightSlat.addObject(rightSlatPanel);
			rightSlat.addObject(rightMiddleSupport);
			rightSlat.addObject(rightBackSupport);
			
			rightSlat.setTranslate(-0.23f, 0f + .075f*i, 0.5f);
			
			leftSlat.addObject(leftFrontSupport);
			leftSlat.addObject(leftSlatPanel);
			leftSlat.addObject(leftMiddleSupport);
			leftSlat.addObject(leftBackSupport);
			
			leftSlat.setTranslate(0.23f, 0f + .075f*i, 0.5f);
			
			BodyAndRearAssembly.addObject(leftSlat);
			BodyAndRearAssembly.addObject(rightSlat);
		
		}
		

		BodyAndRearAssembly.addObject(bottomOfBody);
		BodyAndRearAssembly.addObject(frontSide);
		BodyAndRearAssembly.addObject(backSide);
		BodyAndRearAssembly.addObject(leftSide);
		BodyAndRearAssembly.addObject(rightSide);
		BodyAndRearAssembly.addObject(backAxle);
		BodyAndRearAssembly.addObject(backAxleLeftStand);
		BodyAndRearAssembly.addObject(backAxleRightStand);
		BodyAndRearAssembly.addObject(backLeftWheel);
		BodyAndRearAssembly.addObject(backRightWheel);
		BodyAndRearAssembly.addObject(backLeftHub);
		BodyAndRearAssembly.addObject(backRightHub);
		BodyAndRearAssembly.addObject(frontLeftCorner);
		BodyAndRearAssembly.addObject(frontRightCorner);
		BodyAndRearAssembly.addObject(rearLeftCorner);
		BodyAndRearAssembly.addObject(rearRightCorner);
		BodyAndRearAssembly.addObject(bottomFrontLip);
		BodyAndRearAssembly.addObject(bottomBackLip);
		BodyAndRearAssembly.addObject(bottomLeftLip);
		BodyAndRearAssembly.addObject(bottomRightLip);
		BodyAndRearAssembly.addObject(bottomFrontLeft);
		BodyAndRearAssembly.addObject(bottomFrontRight);
		BodyAndRearAssembly.addObject(bottomBackLeft);
		BodyAndRearAssembly.addObject(bottomBackRight);		
		BodyAndRearAssembly.addObject(rearRightCorner);
		BodyAndRearAssembly.addObject(topFrontLip);
		BodyAndRearAssembly.addObject(topBackLip);
		BodyAndRearAssembly.addObject(topLeftLip);
		BodyAndRearAssembly.addObject(topRightLip);
		BodyAndRearAssembly.addObject(topFrontLeft);
		BodyAndRearAssembly.addObject(topFrontRight);
		BodyAndRearAssembly.addObject(topBackLeft);
		BodyAndRearAssembly.addObject(topBackRight);
		
		ArmAssembly.addObject(arm);
		ArmAssembly.addObject(handleBottom);
		ArmAssembly.addObject(handleLeft);
		ArmAssembly.addObject(handleRight);
		ArmAssembly.addObject(handleTop);
		
		ArmAssembly.setTranslate(0f, -0.325f, -0.2f);
		ArmAssembly.setRotationAxisAngle(armAngle, 1f, 0f, 0f);
		
		FrontAssembly.addObject(frontAxle);
		FrontAssembly.addObject(frontAxleStand);
		FrontAssembly.addObject(frontLeftWheel);
		FrontAssembly.addObject(frontRightWheel);
		FrontAssembly.addObject(frontLeftHub);
		FrontAssembly.addObject(frontRightHub);
		FrontAssembly.addObject(frontAxleConnector);
		FrontAssembly.addObject(ballJoint);
		FrontAssembly.addObject(ArmAssembly);
		
		FrontAssembly.setTranslate(0f, 0f, 0.1f);
		FrontAssembly.setRotationAxisAngle(wheelAngle, 0f, 1f, 0f);
		
//		// Cone
////		MeshObject cone = PrimitiveFactory.makeCone(30, 30, "Cone");
////		cone.setMaterial(new Lambertian(new Color3f(0f, 0f, 0f)));
////		Wagon.addObject(cone);
//
		// Box test
//		MeshObject box1 = PrimitiveFactory.makeBox("Box 1");
//		MeshObject box2 = PrimitiveFactory.makeBox("Box 2");
////
////		//V1
////		box1.setTranslate(0f, .5f, 0f);
////		box1.setScale(1.5f, 1f, .5f);
////		box2.setTranslate(0f, 1f, 1f);
////		box2.setScale(1f, 2f, 1f);
////		
//		// V2
//		box1.setTranslate(0f,-0.25f,0.5f);
//		box1.setScale(0.25f, 0.01f, .5f);
//		box2.setTranslate(0f,-0.125f,1f);
//		box2.setScale(0.25f, 0.125f, 0.01f);
////
//		box1.setMaterial(new Lambertian(new Color3f(1f, 0f, 0f)));
//		box2.setMaterial(new Lambertian(new Color3f(1f, 0f, 0f)));
//		Wagon.addObject(box1);
//		Wagon.addObject(box2);
		
		Wagon.addObject(BodyAndRearAssembly);
		Wagon.addObject(FrontAssembly);
		
		Wagon.setRotationAxisAngle(90f, 0f, 1f, 0f);
		
//		Wagon.setTranslate(1f, 0f, 0f);
		
		out.addObject(Wagon);
		
		return out;
	}

}
</pre></body></html>